package com.proyecto.personas.modelo.validacion.proyecto;

import com.proyecto.core.Utilidades.ObtenerFecha;
import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.interfaces.IServicioTransaccion;
import com.proyecto.core.modelo.validacion.IValidacionServicio;
import com.proyecto.personas.modelo.dto.PersRelaciones;
import com.proyecto.personas.modelo.dto.PersRelacionesId;
import com.proyecto.personas.modelo.dto.PersRelacsTipoId;

public class ValidacionServicioPersRelaciones implements IValidacionServicio {

	IServicioTransaccion servicioPersonaRelacionTipo;

	IServicioTransaccion servicioTipoNip;

	IServicioTransaccion servicioPersonas;

	public void consultar(Object o) throws GeneralException {

		PersRelacionesId objPersRelacionesId = (PersRelacionesId) o;
		if (objPersRelacionesId == null
				|| objPersRelacionesId.getPersonas() == null
				|| objPersRelacionesId.getPersonas().getId() == null
				|| objPersRelacionesId.getPersonas().getId().getCiaopr() == null
				|| "".equals(objPersRelacionesId.getPersonas().getId()
						.getCiaopr().trim())
				|| objPersRelacionesId.getPersonas().getId().getNropersona() == null
				|| objPersRelacionesId.getNropersonarel() == null
				|| objPersRelacionesId.getPersrelstipcod() == null
				|| objPersRelacionesId.getPersrelstipcod().trim().equals("")) {
			throw new GeneralException(
					"error.persona.datosBasicos.persRelaciones.consulta.pkNull");
		}
	}
	

	public void consultarTodos(Object o) throws GeneralException {
		if (o == null) {
			throw new GeneralException(
					"error.persona.datosBasicos.persRelaciones.consulta.pkNull");
		}
	}



	public void incluir(Object o) throws GeneralException {
		PersRelaciones objPersRelaciones = (PersRelaciones) o;
		if (objPersRelaciones == null
				|| objPersRelaciones.getId().getPersonas().getId().getCiaopr() == null
				|| "".equals(objPersRelaciones.getId().getPersonas().getId().getCiaopr().trim())
				|| objPersRelaciones.getId().getPersonas().getId().getNropersona() == null
				|| "".equals(objPersRelaciones.getId().getPersonas().getId().getNropersona().toString())){
			throw new GeneralException(
					"error.persona.datosBasicos.persRelaciones.incluir.pkNull");
		}
		this.validaCampos(objPersRelaciones);
		
	}

	public void modificar(Object o) throws GeneralException {
		PersRelaciones objPersRelaciones = (PersRelaciones) o;
		if (objPersRelaciones == null
				|| objPersRelaciones.getId().getPersonas().getId().getNropersona()== -1
				|| objPersRelaciones.getId().getPersonas().getId().getNropersona() == null
				|| objPersRelaciones.getId().getPersonas().getId().getCiaopr().equals("")
				|| objPersRelaciones.getId().getPersonas().getId().getCiaopr() == null
				|| objPersRelaciones.getId().getNropersonarel() == null 
				|| objPersRelaciones.getId().getNropersonarel() == -1
				|| objPersRelaciones.getId().getPersrelstipcod() == null
				|| "".equals(objPersRelaciones.getId().getPersrelstipcod().trim())){
			throw new GeneralException(
					"error.persona.datosBasicos.persRelaciones.modificar.pkNull");
		}
		this.validaCampos(objPersRelaciones);	
	}
	
	public void eliminar(Object o) throws GeneralException {
		PersRelaciones objPersRelaciones = (PersRelaciones) o;

		if (objPersRelaciones == null || 
						objPersRelaciones.getId().getPersonas().getId().getCiaopr() == null
						|| "".equals(objPersRelaciones.getId().getPersonas().getId().getCiaopr().trim())
						|| objPersRelaciones.getId().getPersonas().getId().getNropersona() == null
						|| objPersRelaciones.getId().getNropersonarel() == null
						|| objPersRelaciones.getId().getNropersonarel().equals("")
						|| objPersRelaciones.getId().getPersrelstipcod() == null
						|| objPersRelaciones.getId().getPersrelstipcod().trim().equals("")){
			throw new GeneralException(
					"error.persona.datosBasicos.persRelaciones.eliminar.pkNull");
		}
	}

	private void validaCampos(PersRelaciones objPersRelaciones) throws GeneralException {
		// validamos los campos requeridos..
		String campos = "";
		// TODO: cambiar estos campos de la lectura de un .properties
		if (objPersRelaciones.getId().getNropersonarel() == null 
				||objPersRelaciones.getId().getNropersonarel() == -1) {
			campos = campos + "Relaciones.PersonaNombre;";
		}
		if (objPersRelaciones.getId().getPersrelstipcod() == null
				|| "".equals(objPersRelaciones.getId().getPersrelstipcod()
						.trim())) {
			campos = campos + "Relaciones.Relacion;";
		}
		if (!"".equals(campos)) {
			throw new GeneralException(
					"error.persona.datosBasicos.persRelaciones.incluir.campos_obligatorios",
					campos);
		}
		// validamos que los codigo de la tabla de apoyo existan.
		if (objPersRelaciones.getId().getPersrelstipcod() != null) {
			servicioPersonaRelacionTipo
					.consultar(new PersRelacsTipoId(objPersRelaciones.getId()
							.getPersonas().getId().getCiaopr(),
							objPersRelaciones.getId().getPersrelstipcod()));
		}
		
		//Validamos que una persona no pueda relacionarse consigo mismo.
		if(objPersRelaciones.getId().getPersonas().getId().getNropersona().equals(objPersRelaciones.getId().getNropersonarel())){
			throw new GeneralException("error.persona.datosBasicos.persRelaciones.incluir.relacionErrada");
		}
		
		//Validamos que la fecha de fin de la relaci�n, no sea menor que su fecha de fin de relaci�n
		if(objPersRelaciones.getFechafinrelacion()!=null){
			if(objPersRelaciones.getFechainicrelacion()!=null){
			if(ObtenerFecha.fecha_Inicio_Mayor_Fin(objPersRelaciones.getFechainicrelacion(),
					objPersRelaciones.getFechafinrelacion())){
				System.out.println("Estoy en una relacion invalida");
				throw new GeneralException("error.persona.datosBasicos.persRelaciones.FechaInicioMayorFechaFin");
			}
			}
		}
	}

	public void buscarCatalogoPorPropiedad(String atributo, String valor)
			throws GeneralException {
		if (atributo == null || valor == null || atributo.equals("")
				|| valor.equals("")) {
			throw new GeneralException(
					"error.persona.datosBasicos.persRelaciones.buscarCatalogoXPropiedad.parametrosInvalidos");
		}
	}

	public IServicioTransaccion getServicioPersonaRelacionTipo() {
		return servicioPersonaRelacionTipo;
	}

	public void setServicioPersonaRelacionTipo(
			IServicioTransaccion servicioPersonaRelacionTipo) {
		this.servicioPersonaRelacionTipo = servicioPersonaRelacionTipo;
	}

	public IServicioTransaccion getServicioTipoNip() {
		return servicioTipoNip;
	}

	public void setServicioTipoNip(IServicioTransaccion servicioTipoNip) {
		this.servicioTipoNip = servicioTipoNip;
	}

	public IServicioTransaccion getServicioPersonas() {
		return servicioPersonas;
	}

	public void setServicioPersonas(IServicioTransaccion servicioPersonas) {
		this.servicioPersonas = servicioPersonas;
	}
}
